/*********************************************************************************
*Copyright(C),Your Company
*FileName:  log.h
*Author:  	xxs
*Version:  	V1.0.1
*Date:  	2021/01/28
*Description:  	用于软件日志模块
				直接使用给定的宏进行操作
*Others:  		void
*Function List:
	 1.LOG_TRACE(str)		追踪日志
	 2.LOG_DEBUG(str)		调试日志
	 3.LOG_INFO(str)		信息日志
	 4.LOG_WARN(str)		警告日志
	 5.LOG_ERROR(str)		错误日志
	 6.LOG_FATAL(str)		致命错误日志
*History:
	 1.Date:			2021/01/28
	   Author:			zxq
	   Modification:	由于使用动态库出现无法关闭程序的bug（只要初始化构造函数就
						不会出现该bug -> 简单的说就是使用日志模块记录一次），
						故将动态库改变为静态库。
	 2.…………
**********************************************************************************/
#pragma once

#define LOG_TRACE(str)			LOG_TRACE_PRO(str)
#define LOG_DEBUG(str)			LOG_DEBUG_PRO(str)
#define LOG_INFO(str)			LOG_INFO_PRO(str)
#define LOG_WARN(str)			LOG_WARN_PRO(str)
#define LOG_ERROR(str)			LOG_ERROR_PRO(str)
#define LOG_FATAL(str)			LOG_FATAL_PRO(str)


///////////////////////////////////////////////////////////////////////////////
//下面是源码，不太需要关心
///////////////////////////////////////////////////////////////////////////////
#define LOG_TRACE_PRO(str)		LOG4CPLUS_TRACE(Log::GetInstance()->logger, string(str).c_str())
#define LOG_DEBUG_PRO(str)		LOG4CPLUS_DEBUG(Log::GetInstance()->logger, string(str).c_str())
#define LOG_INFO_PRO(str)		LOG4CPLUS_INFO(Log::GetInstance()->logger, string(str).c_str())
#define LOG_WARN_PRO(str)		LOG4CPLUS_WARN(Log::GetInstance()->logger, string(str).c_str())
#define LOG_ERROR_PRO(str)		LOG4CPLUS_ERROR(Log::GetInstance()->logger, string(str).c_str())
#define LOG_FATAL_PRO(str)		LOG4CPLUS_FATAL(Log::GetInstance()->logger, string(str).c_str())

#include <mutex>
#include <string>
#include <iostream>
#include <Windows.h>
#include <log4cplus/layout.h> 
#include <log4cplus/logger.h>
#include <log4cplus/log4cplus.h>
#include <log4cplus/configurator.h> 
#include <log4cplus/loggingmacros.h> 
#include <log4cplus/consoleappender.h>
#include <log4cplus/helpers/stringhelper.h> 

#ifdef _DEBUG
#define MY_LOG_FILE_PATH	"../depends/lib-log4cplus/profile/logconfig.property"
//#pragma comment(lib,		"../depends/lib-log4cplus/lib/Debug_x64/log4cplusD.lib")		//动态库
#pragma comment(lib,		"../depends/lib-log4cplus/lib/Debug_x64/log4cplusSUD.lib")		//静态库
#else
#define MY_LOG_FILE_PATH	"./profile/logconfig.property"
//#pragma comment(lib,		"../depends/lib-log4cplus/lib/Release_x64/log4cplus.lib")
#pragma comment(lib,		"../depends/lib-log4cplus/lib/Debug_x64/log4cplusSU.lib")		
#endif

using namespace std;
using namespace log4cplus;
using namespace log4cplus::helpers;

class Log;
class CGar_Log;
class Log
{
	friend CGar_Log;
public:
	Logger logger;
	static Log* GetInstance();	//获取类句柄

private:
	Log();						//构造函数私有化
	static Log* m_instance;		//类句柄
};
